﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DIProject.Stock
{
    public partial class CashDisgather : Form
    {
        private DataSets.Sales.GoodsSearchRow gRow;
        public CashDisgather(DataSets.Sales.GoodsSearchRow gsr)
        {
            if (gsr == null)
            {
                MessageBox.Show("Не выбран разделяемый товар");
                this.Close();
            }
        gRow = gsr;
            InitializeComponent();
        }
        DataSets.Util.PartyDefaultRow _partyDetail;
        private DataSets.Util.PartyDefaultRow PartyDetail
        {
            get
            {
                if (_partyDetail != null)
                    return _partyDetail;
                DataSets.UtilTableAdapters.PartyDefaultTableAdapter adapter = new DIProject.DataSets.UtilTableAdapters.PartyDefaultTableAdapter();
                DataSets.Util.PartyDefaultDataTable dt = adapter.GetData(gRow.PartyId);
                if (dt.Count < 1)
                {
                    MessageBox.Show("Не найдена партия. Нельзя разделить");
                    this.Close();
                }
                DataSets.Util.PartyDefaultRow result = dt.Rows[0] as DataSets.Util.PartyDefaultRow;
                if (result.RestQntty < 1)
                {
                    MessageBox.Show("Количество товара в партии меньше одного. Разделить невозможно.");
                    this.Close();
                }                
                if (!result.AllowUnPack)
                {
                    MessageBox.Show("Данный товар не разрешено разделять. Обратитесь к заведующему аптекой!");
                    this.Close();
                }
                _partyDetail = result;
                return result;
            }
        }
        private void CashDisgather_Load(object sender, EventArgs e)
        {
            textBoxName0.Text = gRow.Name;
            textBoxManufacturer.Text = gRow.ManufacturerName;
            _partyDetail = null;
            textBoxBarcode0.Text = PartyDetail.BarCode;
            textBoxPrice0.Text = gRow.RetailPrice.ToString();
            DivGoods();
        }
        private void DivGoods()
        {
            try
            {
                DataSets.StockTableAdapters.DisgatheredGoodsTableAdapter adapter = new DIProject.DataSets.StockTableAdapters.DisgatheredGoodsTableAdapter();
                DataSets.Stock.DisgatheredGoodsDataTable dt = adapter.GetData(PartyDetail.GoodsId);
                if (dt.Count < 1)
                {
                    MessageBox.Show("Не найден товар!");
                    this.Close();
                }
                DataSets.Stock.DisgatheredGoodsRow rTmp = dt.Rows[0] as DataSets.Stock.DisgatheredGoodsRow;
                if (rTmp.IsIdNull())
                {
                    MessageBox.Show("Товар в данной партии нельзя разделить! Не задан дочерний товар!");
                    this.Close();
                }
                DataSets.Stock.DisgatheredGoodsRow row = dt.Rows[0] as DataSets.Stock.DisgatheredGoodsRow;
                int parentRetailPack = PartyDetail.RetailPack;
                decimal parentPrice = gRow.RetailPrice;
                Int32 childRetailPack = row.RetailPackChild;
                int childQntty = parentRetailPack / childRetailPack;
                int test = parentRetailPack % childRetailPack;
                if (test != 0)
                {
                    MessageBox.Show("Невозможно разделить товар! Количество в родительском товаре в разделяемой упаковке не делиться нацело на количество в дочерней!");
                    return;
                }
                decimal childPrice = parentPrice / childQntty;
                //количество меньше 2 - делить нельзя!
                if (childQntty < 2)
                {
                    MessageBox.Show("Невозможно разделить товар!");
                    return;
                }
                //в любом случае создаем 2 партии
                childPrice = decimal.Floor(childPrice * 100m) / 100m;	// до 1 копеек  
                decimal? RetailPrice1 = null;
                Int32? Qntty1 = null;
                decimal? RetailPrice2 = null;
                Int32? Qntty2 = null;
              //  if (childPrice != decimal.Round(childPrice, 2))
              //  {
                    --childQntty;
                    RetailPrice1 = parentPrice - childPrice * childQntty;
                    Qntty1 = 1;
                    RetailPrice2 = childPrice;
                    Qntty2 = childQntty;
              //  }
              /*  else
                {
                    RetailPrice1 = childPrice;
                    Qntty1 = childQntty;
                }*/
                Int32? docId = null;
                DataSets.StockTableAdapters.StockQueries adap = new DIProject.DataSets.StockTableAdapters.StockQueries();
                adap.DisgatherGoodsInsert(PartyDetail.Id, row.Id, RetailPrice1, Qntty1, RetailPrice2, Qntty2, string.Empty, FirstForm.Login, ref docId);
                if (!docId.HasValue)
                {
                    MessageBox.Show("Не удалось разукомлектовать товар");
                    this.Close();
                }
                DataSets.StockTableAdapters.DisgatherTableAdapter adapt2 = new DIProject.DataSets.StockTableAdapters.DisgatherTableAdapter();
                DataSets.Stock.DisgatherDataTable tab = adapt2.GetData(docId.Value);
                if (tab.Count < 1)
                {
                    MessageBox.Show("Не удалось разукомлектовать товар");
                    this.Close();
                }
                DataSets.Stock.DisgatherRow dRow;
                if(tab.Count == 2)
                    dRow = tab.Rows[1] as DataSets.Stock.DisgatherRow;
                else
                    dRow = tab.Rows[0] as DataSets.Stock.DisgatherRow;
                if(!dRow.IsGoodsName1Null())
                    textBoxName1.Text = dRow.GoodsName1;
                if(!dRow.IsBarcode1Null())
                    textBoxBarcode1.Text = dRow.Barcode1;
                if(!dRow.IsRetailPrice1Null())
                    textBoxPrice1.Text = dRow.RetailPrice1.ToString();
                if(!dRow.IsQntty1Null())
                    textBoxQntty1.Text = dRow.Qntty1.ToString();
                if (!dRow.IsBarcode2Null())
                    textBoxBarcode2.Text = dRow.Barcode2;
                if (!dRow.IsRetailPrice2Null())
                    textBoxPrice2.Text = dRow.RetailPrice2.ToString();
                if (!dRow.IsQntty2Null())
                    textBoxQntty2.Text = dRow.Qntty2.ToString();
            }
            catch (System.Data.SqlClient.SqlException se)
            {
                MessageBox.Show("Не удалось разукомлектовать товар" + se.Message);
                this.Close();
            }
            catch (Exception ee)
            {
                MessageBox.Show("Не удалось разукомлектовать товар" + ee.Message);
                this.Close();
            }
            
        }

        private void buttonCancel_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}